package com.company.hrmadmin.common.util;

import java.util.regex.Pattern;

/**
 * 正则工具类
 *
 * @author Song, Wei
 * Date: 2022/3/17 17:47
 */
public class RegexUtil {
    /**
     * 匹配中文或者数字或者字母
     */
    public static final Pattern REGEX_CHINESE_OR_NUMBER_LETTER = Pattern.compile("^[a-z0-9A-Z\\u4e00-\\u9fa5]+$");

    /**
     * 匹配用户名，4-16位字符（大写、小写、下划线、数字）
     */
    public static final Pattern REGEX_USERNAME = Pattern.compile("^[a-zA-Z0-9_]{4,16}$");

    /**
     * 匹配密码
     */
    public static final Pattern REGEX_PASSWORD = Pattern.compile("^(?=.*\\d)(?=.*[a-zA-Z])(?=.*[~!@#$%^&*()_+\\-={}|\\]\\[:\";'<>?,./]).{8,16}$");

    /**
     * 邮箱
     */
    public static final Pattern REGEX_EMAIL = Pattern.compile("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$");

    /**
     * 手机号码
     */
    public static final Pattern REGEX_PHONE = Pattern.compile("^1[3456789]\\d{9}$");


    /**
     * 普通http|https正则校验
     */
    public static final Pattern REGEX_WEB_URL_NORMAL = Pattern.compile("^(http|https):\\/\\/[\\w-]+(\\.[\\w-]+)*(:(0|[1-9][0-9]{0,3}|[1-5]\\d{4}|6[1-4]\\d{3}|65[1-4]\\d{2}|655[1-2]\\d|6553[1-5]))?([/#?]([\\w\\-,@?^=%&:/~+#.]*[\\w\\-@?^=%&/~+#])?)?$");

    /**
     * 文件名称合法性校验
     */
    public static final Pattern FILENAME = Pattern.compile("[^\\s\\\\/:*?\"<>|](\\x20|[^\\s\\\\/:*?\"<>|])*[^\\s\\\\/:*?\"<>|.]$");

    /**
     * 只包含中文、数字和英文字母
     *
     * @param s 待校验字符串
     * @return true: 校验通过 false: 校验失败
     */
    public static boolean isChineseOrNumberOrLetter(String s) {
        return REGEX_CHINESE_OR_NUMBER_LETTER.matcher(s).matches();
    }


    /**
     * 用户名校验
     *
     * @param username 用户名
     * @return true: 校验通过 false: 校验失败
     */
    public static boolean checkUsername(String username) {
        return REGEX_USERNAME.matcher(username).matches();
    }

    /**
     * 用户密码校验
     *
     * @param password 用户密码
     * @return true: 校验通过 false: 校验失败
     */
    public static boolean checkPassword(String password) {
        return REGEX_PASSWORD.matcher(password).matches();
    }

    /**
     * 用户邮箱校验
     *
     * @param email 用户邮箱
     * @return true: 校验通过 false: 校验失败
     */
    public static boolean checkEmail(String email) {
        return REGEX_EMAIL.matcher(email).matches();
    }

    /**
     * 用户手机号校验
     *
     * @param phone 用户手机号
     * @return true: 校验通过 false: 校验失败
     */
    public static boolean checkPhone(String phone) {
        return REGEX_PHONE.matcher(phone).matches();
    }

    /**
     * 文件名称合法性校验
     *
     * @param fileName 文件名
     * @return true: 校验通过 false: 校验失败
     */
    public static boolean checkFileName(String fileName) {
        return FILENAME.matcher(fileName).matches();
    }


    /**
     * 校验普通http|https的url是否正确
     *
     * @param url web url
     */
    public static boolean checkNormalWebUrl(String url) {
        return REGEX_WEB_URL_NORMAL.matcher(url).matches();
    }
}
